﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Capa_Dominio;
using Capa_Persistencia_NH.Interface;

namespace Capa_Negocio.Gestionar_Reservacion
{
    public class AdministrarClienteImpl : IAdministrarReservacion
    {
        #region Dependencias
        ITipoDocumento tipoDocumentoDAO = null;
        ICliente clienteDAO = null;
        IDistrito distritoDAO = null;
        #endregion

        public Cliente InscribirCliente(string apellidos, string nombres, int codigoDocumento, string numeroDocumento,
            string email, DateTime fechaNacimiento, string claveAcceso, string reclaveAcceso, string direccion, int codigoDistrito, Boolean estado)
        {
            // Excepción si falta algún dato requerido
            if (apellidos == null || nombres == null || codigoDocumento == 0 || codigoDistrito == 0)
                throw new DatosInsuficientesException("Faltan datos para crear el Cliente");

            TipoDocumento objtipoDocumento = tipoDocumentoDAO.Obtener(codigoDocumento);
            Distrito objDistrito = distritoDAO.Obtener(codigoDistrito);

            ICollection<Cliente> clienteEncontrado = clienteDAO.ListarXNombre(nombres);
            if (clienteEncontrado.Count > 0)
            {
                throw new EntidadRepetidaException("El Cliente ya existe");
            }

            ICollection<Cliente> clientesEncontrados = clienteDAO.ListarXEmail(email);
            if (clienteEncontrado.Count > 0)
            {
                throw new EntidadRepetidaException("El Email ingresado ya existe");
            }

            if (!string.Equals(claveAcceso, reclaveAcceso))
            {
                throw new EntidadRepetidaException("Las CLaves no son Iguales");
            }
            Cliente objCliente = new Cliente();
            objCliente.Apellidos = apellidos;
            objCliente.Nombres = nombres;
            objCliente.TipoDocumento = objtipoDocumento;
            objCliente.NumeroDocumento = numeroDocumento;
            objCliente.Email = email;
            objCliente.FechaNacimiento = fechaNacimiento;
            objCliente.ClaveAcceso = claveAcceso;
            objCliente.Direccion = direccion;
            objCliente.Distrito = objDistrito;
            objDistrito.Estado = estado;

            return clienteDAO.Crear(objCliente);
        }

        public TipoDocumento CrearTipoDocumento(TipoDocumento objTipoDocumento)
        {
            return tipoDocumentoDAO.Crear(objTipoDocumento);
        }

    }
}



